home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / UTILITY / RSCCONV.M < prev    next >
Encoding:
Text File  |  1990-12-19  |  5.9 KB  |  220 lines

  1. MODULE RscConv;
  2.  
  3. (*  Resource Konverter  V1.3  für Megamax Modula-2 und KRsc 2  23.10.90
  4.  *
  5.  *  Erstellt 1/90  von Uwe Stein und Wolfgang Walter
  6.  *
  7.  *  Unsere Adresse:     Uwe Stein und Wolfgang Walter
  8.  *                      Postfach 1608
  9.  *                      5653 Leichlingen 1
  10.  *
  11.  *  E-Mail:             Wolfgang Walter @ K2    (im MAUS-Netz)
  12.  *)
  13.  
  14. FROM MOSGlobals IMPORT Drive;
  15. FROM Directory  IMPORT GetCurrentDir,Rename;
  16. FROM FileNames  IMPORT SplitPath,SplitName;
  17. FROM Files      IMPORT Access,ReplaceMode,Open,Create,Close,EOF,State,File;
  18. FROM PathEnv    IMPORT SelectFile;
  19. FROM InOut      IMPORT WriteCard,WriteString,WriteLn;
  20. FROM Strings    IMPORT String,Relation,Empty,Pos,Delete,Append,Concat,Split,
  21.                        Assign,EatSpaces;
  22.  
  23. IMPORT Text;
  24. IMPORT FastStrings;
  25.  
  26. CONST
  27.      maxLines   = 400;         (* beliebig erweiterbar *)
  28.      GrossZeichenWandlung = TRUE;
  29.  
  30. TYPE
  31.     ShortStr1TYP = ARRAY[0..7] OF CHAR;
  32.     ShortStr2TYP = ARRAY[0..7] OF CHAR;
  33.     TableTYP     = RECORD
  34.                      High  :CARDINAL;
  35.                      T     :ARRAY[1..maxLines] OF ShortStr1TYP;
  36.                      B     :ARRAY[1..maxLines] OF ShortStr2TYP;
  37.                    END;
  38.     
  39. VAR
  40.      Table      :TableTYP;
  41.      
  42.      dBool      :BOOLEAN;
  43.      dInt       :INTEGER;
  44.      
  45.      ModuleName,
  46.      SrcDat,
  47.      SrcName,
  48.      DestName,
  49.      IOldName,
  50.      ImpNeuName,
  51.      ConvName     :String;
  52.      
  53.   
  54. PROCEDURE TextWriteString(f :File; S :ARRAY OF CHAR);
  55.   BEGIN
  56.     Text.WriteString(f,S);
  57.   END TextWriteString;
  58.   
  59. PROCEDURE TextWriteLn(f :File);
  60.   BEGIN
  61.     Text.WriteLn(f);
  62.   END TextWriteLn;
  63.   
  64. PROCEDURE SourceDateiWaehlen(VAR FileName :String);
  65.   VAR Spath,Sname,dStr :String;
  66.       dBool,OK :BOOLEAN;
  67.   BEGIN
  68.     SplitPath(FileName,Spath,dStr);
  69.     Append('*.DEF',Spath,OK);
  70.     Sname:='';
  71.     SelectFile('DEF-Datei wählen ...',Spath,Sname,OK);
  72.     IF OK THEN
  73.        SplitPath(Spath,Spath,dStr);
  74.        SplitName(Sname,Sname,dStr);
  75.        Append('.',Sname,dBool);
  76.        Concat(Spath,Sname,FileName,OK);
  77.     ELSE
  78.       FileName:='';
  79.     END;
  80.   END SourceDateiWaehlen;
  81.  
  82.  
  83. PROCEDURE LiesSource;
  84.   VAR f           :File;
  85.       InConst     :BOOLEAN;
  86.       SourceLine  :String;
  87.       P           :INTEGER;
  88.       dBool       :BOOLEAN;
  89.   BEGIN
  90.     Table.High:=0;
  91.     InConst:=FALSE;
  92.     
  93.     Open(f,SrcName,readSeqTxt);
  94.     
  95.     WHILE (~EOF(f)) & (~InConst) DO
  96.            Text.ReadString(f,SourceLine);
  97.            InConst:=(InConst OR (Pos('CONST',SourceLine,0)#-1));
  98.            
  99.            P:=Pos('DEFINITION MODULE',SourceLine,0);
  100.            IF P#-1 THEN
  101.               Delete(SourceLine,0,17,dBool);
  102.               Delete(SourceLine,Pos(';',SourceLine,0),1,dBool);
  103.               EatSpaces(SourceLine);
  104.               ModuleName:=SourceLine;
  105.               WriteString('MODULENAME: '); WriteString(ModuleName);
  106.               WriteLn;
  107.            END;
  108.     END;
  109.        
  110.     WHILE (~EOF(f))  DO
  111.           Text.ReadString(f,SourceLine);
  112.        
  113.           WHILE Pos(CHR(09),SourceLine,0)#-1 DO
  114.                 Delete(SourceLine, Pos(CHR(09),SourceLine,0) ,1,dBool);
  115.           END;
  116.        
  117.           IF Pos('=',SourceLine,0)#-1 THEN
  118.              INC(Table.High);
  119.              Split(SourceLine,Pos('=',SourceLine,0),
  120.                    Table.T[Table.High],Table.B[Table.High],dBool);
  121.              IF GrossZeichenWandlung THEN
  122.                 Table.T[Table.High,0]:=CAP(Table.T[Table.High,0])
  123.              END;
  124.           END;
  125.     END;
  126.     Close(f);
  127.   END LiesSource;
  128.   
  129.   
  130. PROCEDURE SchreibeDest;
  131.   VAR f    :File;
  132.       I    :CARDINAL;
  133.       dStr :String;
  134.       
  135.   PROCEDURE SchreibeExport;
  136.     VAR I,J :CARDINAL;
  137.         S :String;
  138.         ok:BOOLEAN;
  139.     BEGIN
  140.       TextWriteString(f,'EXPORT'); TextWriteLn(f);
  141.       FOR I:=1 TO Table.High-1 DO
  142.           Assign (Table.T[I], S, ok);
  143.           EatSpaces(S);
  144.           TextWriteString(f,S);
  145.           TextWriteString(f,',');
  146.           IF (I MOD 8)=0 THEN
  147.              TextWriteLn(f);
  148.           END;
  149.        END;
  150.        TextWriteString(f,Table.T[Table.High]);
  151.        TextWriteString(f,';');
  152.        TextWriteLn(f);
  153.     END SchreibeExport;
  154.     
  155.   PROCEDURE SchreibeKonstanten;
  156.     VAR dStr :String;
  157.         I    :CARDINAL;
  158.     BEGIN
  159.       TextWriteLn(f);
  160.       TextWriteString(f,'CONST');
  161.       TextWriteLn(f);
  162.       FOR I:=1 TO Table.High DO
  163.           FastStrings.Concat(Table.T[I],Table.B[I],dStr);
  164.           TextWriteString(f,dStr);
  165.           TextWriteLn(f);
  166.       END;
  167.     END SchreibeKonstanten;
  168.       
  169.   BEGIN
  170.     Create(f,DestName,writeSeqTxt,replaceOld);
  171.     TextWriteString(f,'DEFINITION MODULE ');
  172.     TextWriteString(f,ModuleName);
  173.     TextWriteString(f,';');
  174.     
  175.     TextWriteLn(f);
  176.     
  177.     SchreibeExport;
  178.     
  179.     SchreibeKonstanten;
  180.     
  181.     Concat('END ',ModuleName,dStr,dBool);
  182.     Append('.',dStr,dBool);
  183.     TextWriteString(f,dStr);
  184.     TextWriteLn(f);
  185.     Close(f);
  186.   END SchreibeDest;
  187.   
  188. BEGIN (* main *)
  189.   WriteLn;
  190.   WriteString('  Resource Konverter  V1.2  für Megamax Modula-2 und KRsc 2');
  191.   WriteLn;
  192.   WriteString('  Erstellt 1/90  von Uwe Stein und Wolfgang Walter');
  193.   WriteLn;
  194.   WriteLn;
  195.   
  196.   GetCurrentDir (defaultDrv,SrcDat);
  197.   
  198.   SourceDateiWaehlen(SrcDat);
  199.   
  200.   IF ~Empty(SrcDat) THEN
  201.       
  202.     Concat(SrcDat,'DEF',SrcName,dBool);     (* D-File von KRsc 2 *)
  203.     Concat(SrcDat,'BAK',ConvName,dBool);    (* neuer Name D-File von KRsc 2 *)
  204.     Concat(SrcDat,'D  ',DestName,dBool);    (* D-File für MM2    *)
  205.     Concat(SrcDat,'MOD',IOldName,dBool);    (* I-File von KRsc 2 *)
  206.     Concat(SrcDat,'I'  ,ImpNeuName,dBool);  (* I-File für MM2    *)
  207.  
  208.     LiesSource;
  209.     
  210.     WriteCard(Table.High,4); WriteString('  Symbole'); WriteLn;
  211.     
  212.     SchreibeDest;
  213.  
  214.     
  215.     Rename(IOldName,ImpNeuName,dInt);    (*  *.IMP ->  *.I   *)
  216.     Rename(SrcName   ,ConvName  ,dInt);  (*  *.DEF ->  *.BAK *)
  217.     
  218.  END;
  219. END RscConv.
  220.